struct buf {
  int valid;        // has data been read from disk?
  int disk;         // does disk "own" buf? 缓冲区内容是否交给磁盘
  uint dev;         // 设备号 扇区
  uint blockno;     // 缓存的磁盘块号
  struct sleeplock lock;
  uint refcnt;      // 该块被引用次数（即被多少个进程拥有）
  struct buf *prev; // LRU cache list
  struct buf *next;
  uchar data[BSIZE];
  uint ts;          // 时间戳 标记缓冲区的上次使用时间戳
};

